home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 5
/
Apprentice-Release5.iso
/
Source Code
/
Libraries
/
DCLAP 6d
/
dclap6d
/
DNet.more
/
DTCP.h-two
< prev
next >
Wrap
Text File
|
1996-07-05
|
6KB
|
189 lines
// DTCP.h
// by D. Gilbert, 1991-92, with help from code of Harry Chesley, Peter Speck and others
#ifndef __DTCP__
#define __DTCP__
#include <DObject.h>
//#include <DTaskMaster.h>
class DTaskMaster;
extern "C" {
typedef Boolean (*TCPUserBreakHandler)(DTaskMaster* /* itsObject */);
typedef void (*TCPMessageHandler)(DTaskMaster* , long , const char* ); /* itsObject, msgID, msg */
}
class DTCP : public DObject {
public:
static char* LineEnd;
static short LineEndSize;
enum TCPlineEndFlags { kDontAddCRLF= false, kAddCRLF = true};
enum TCPStatusResults { kTCPreleased = -1, kTCPclosed = 0,
kTCPlistening = 2, kTCPopening = 4, kTCPestablished = 8,
kTCPclosing = 16, kTCPPleaseClose = 14, kTCPUnknownState = 32,
kTCPwaitingforopen = 64};
enum TCPExpectedBytesFlags { kTCPStopAtdotcrlf = -1, kTCPStopAtclose = -2};
DTCP();
virtual ~DTCP();
virtual void Initialize();
virtual Boolean IsTCPInstalled();
virtual void Fail(long errNo);
virtual void Fail(const char* msg);
virtual Boolean Failed(); // ???
virtual long Status();
virtual char* StatusString(short state);
virtual long Version();
virtual const char* VersionString(); //??
virtual void InstallMessageHandler(TCPMessageHandler aproc, DTaskMaster* itsObject);
virtual void InstallUserBreak(TCPUserBreakHandler aproc, DTaskMaster* itsObject);
virtual void ShowMessage(const char* msg);
virtual void StatusMessage();
virtual void SetShowProgress( Boolean turnOn);
virtual void ShowProgress( long sendRecvCount);
virtual void ShowProgress();
virtual Boolean EndOfMessage();
virtual void SetEndOfMessage( Boolean isEnded);
virtual Boolean UserBreak();
virtual void StreamYieldTime(); // makes TCPAbort if aborted from TThread
virtual long NameToAddress(const char* hostName);
virtual char* AddressToName(long address);
virtual char* DotAddrToName(const char* dotAddress);
void Open( char* hostname, unsigned short hostport, unsigned short localport = 0);
//void Open(long hostIP, unsigned short hostport, unsigned short localport = 0);
virtual Boolean WaitedForOpen(long delayticks);
virtual Boolean WaitedForOpen();
virtual void Close();
virtual void Release();
virtual void Abort();
virtual void SendBytes(void *data, long datasize, Boolean immediately = true);
virtual void Send(char *data, Boolean immediately = true);
virtual void SendCRLF( Boolean EvenIfLastSendHadCRLF = true, Boolean immediately = true);
virtual void SendStr( char* s, Boolean addCRLF = true, Boolean immediately = true);
virtual long CharsAvailable();
virtual long TotalBytesReceived(); //??
virtual long NewBytesReceived(); //??
virtual long ConnectTime();
virtual void NullTerm( Boolean turnon = true);
virtual void EatResponseLine();
virtual void ReceiveData(void *data, long datasize, long &bytesReceived,
Boolean stopatlf = false);
virtual char* ReadWithChecks( long expectedbytes = kTCPStopAtclose,
Boolean convertnewline = false,
long maxbytes = 0, char* oldbuffer = NULL);
virtual short RecvByte();
virtual char* RecvChars( long readCount);
virtual char* RecvChunk( long maxChunk= 0, char* oldChunk= NULL);
virtual char* RecvLine(); // read up to first LF
#ifdef IsThisObsolete
virtual char* RecvUpTo( Boolean lookForTerm= false, char termChar= 0, char* AppendToThisData = NULL);
virtual char* RecvMsg ( char OKChar= 0, long limit = 0);
#endif
protected:
long fSocket; // socket descriptor
long fTimeout;
Boolean fFailed; // last op failed if true
char* fError; // change to number...
long fErrNo;
Boolean fDoShowProgress; // if true, ShowProgress
Boolean fEndofMessage; // true if recv found end-of-message (dot-cr-lf)
long fBytesread;
long fResultSize; // we don't need all of these counters !!
long fResultNew;
long fResultTotal;
long fMaxResultSize;
long fLimitResultSize; // recv buffer ptrs
char* fResultHand; // recv buffer
long fStartTime; // time at open connection
long fConnectTime; // == current or close time - start time
TCPMessageHandler fMessageProc;
DTaskMaster* fMessageObj;
TCPUserBreakHandler fBreakProc;
DTaskMaster* fBreakObj;
Boolean fLastSentCRLF; // last send ended w/ crlf
Boolean fNullTerm;
#ifdef IsThisObsolete
virtual void OpenRecv( char* oldData, long limit);
virtual Boolean StoreRecvLimit( char b);
virtual void CloseRecv();
#endif
#ifdef UseMacTCPApi
// low level i/o
virtual void SendData( Ptr wdsPtr, Boolean immediately = true);
virtual void NoCopyRead( Ptr theRdsArray, short numEntries);
virtual void ReturnRds( Ptr theRdsArray);
virtual StreamPtr CreateStream(Ptr bufferP, unsigned long bufSize);
virtual void CopyReadArray(char **datap, long datasize, long &bytesReceived,
Ptr aRdsArray, short numEntries,
Boolean convertnewline = false, Boolean checklf = false,
Boolean stopatlf = false);
virtual void SaveUnreadArray();
virtual long UnreadCharsWaiting(Ptr aRdsArray);
#endif // UseMacTCPApi
private:
// from TMacTCP..............
Boolean fConnectionIsOpen;
Boolean fStreamIsOpen;
char fLastc,fLast2c,fLast3c;
long fReadSaveLen;
char* fReadSave;
#ifdef UseMacTCPApi
Ptr fStreamBufferP;
TCPiopb *fPBP, *fReceivePBP, *fAbortPBP;
StreamPtr fStreamP;
Ptr fWdsEntryP;
Ptr fRdsEntryP;
Ptr fWaitingP;
long fWaitSeg;
long fWaitIndx;
Boolean fHasRDS;
// debugging vars
short fGetFile;
#endif
};
extern long gTCPTimeout; // value for fTimeout for each new TTCP
void InitializeTCP();
void FinishTCP();
Boolean TCPIsItInstalled();
long MyIP();
char* GetMyDotName();
long DotName2IP(const char* name);
char* IP2DotName(long ip);
#endif